package main

import (
	"encoding/json"
	"fmt"
	"net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
	// 打印 URI 路径
	fmt.Printf("URI: %s\n", r.URL.Path)

	// 打印请求头
	headers := r.Header
	if len(headers) > 0 {
		fmt.Println("Headers:")
		for key, values := range headers {
			for _, value := range values {
				fmt.Printf("  %s: %s\n", key, value)
			}
		}
	} else {
		fmt.Println("No headers")
	}

	// 打印查询参数
	query := r.URL.Query()
	if len(query) > 0 {
		fmt.Println("Query parameters:")
		for key, values := range query {
			for _, value := range values {
				fmt.Printf("  %s: %s\n", key, value)
			}
		}
	} else {
		fmt.Println("No query parameters")
	}

	// 打印表单参数
	r.ParseForm()
	formParams := r.Form
	if len(formParams) > 0 {
		fmt.Println("Form parameters:")
		for key, values := range formParams {
			for _, value := range values {
				fmt.Printf("  %s: %s\n", key, value)
			}
		}
	} else {
		fmt.Println("No form parameters")
	}

	// 打印 JSON 参数
	var jsonParams interface{}
	if r.Header.Get("Content-Type") == "application/json" {
		if err := json.NewDecoder(r.Body).Decode(&jsonParams); err == nil && jsonParams != nil {
			fmt.Println("JSON parameters:")
			jsonStr, _ := json.MarshalIndent(jsonParams, "", "  ")
			fmt.Printf("%s\n", jsonStr)
		} else {
			fmt.Println("No JSON parameters")
		}
	} else {
		fmt.Println("No JSON parameters")
	}
}

func main() {
	// 注册处理函数
	http.HandleFunc("/", handler)
	// 启动服务
	fmt.Println("Server starting on port 8000...")
	http.ListenAndServe(":8000", nil)
}
